#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
@FileName  :MyMiddleware.py 
@desc      :自定义的中间件
@Author    :Young
@IDE       :PyCharm
@Time      :2021/2/19 0019 14:45
'''
import sys

from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.deprecation import MiddlewareMixin
from django.views.debug import technical_500_response


class MyMiddleware(MiddlewareMixin):    #继承类
    def process_request(self,request):  #执行路由前被调用每个路由都进行调用  #进来
        print(request.method)
        #全局的路由保护
        # if request.user.is_authenticated:   #如果是登录的，直接返回，调用下一个中间件
        #     return
        username = request.session.get('username')  #假设是使用session来验证登录的
        if username:
            return
        elif request.path != '/login/':   #如果请求的不是login，就跳转到login
            return redirect('/login/')

        # else:  #否则返回hello 实现路由保护
        #     # return HttpResponse("hello")   #返回None则调用下一个中间件，返回httpResponse则调用对应的process_response

    def process_response(self, request, response):  #出去
        print('process_response')
        return response   #必须返回响应对象

    def process_view(self,request,view_func,view_args,view_kwargs):
        print('在自己的视图函数之前执行')

    #错误处理
    def process_exception(self,request,exception):
        #对管理员展示错误页面，对一般用户只能看到404和500等页面
        ip = request.META.get('REMOTE_ADDR')  #获取主机地址
        if ip == '127.0.0.1':  #本地
            return technical_500_response(request,*sys.exc_info())   #管理员
        return redirect(reverse("App:index"))
